{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {
    "button": false,
    "deletable": true,
    "new_sheet": false,
    "run_control": {
     "read_only": false
    }
   },
   "source": [
    "<a href=\"https://www.bigdatauniversity.com\"><img src=\"https://ibm.box.com/shared/static/cw2c7r3o20w9zn8gkecaeyjhgw3xdgbj.png\" width=\"400\" align=\"center\"></a>\n",
    "\n",
    "<h1><center>Polynomial Regression</center></h1>\n",
    "\n",
    "<h4>About this Notebook</h4>\n",
    "In this notebook, we learn how to use scikit-learn for Polynomial regression. We download a dataset that is related to fuel consumption and Carbon dioxide emission of cars. Then, we split our data into training and test sets, create a model using training set, evaluate our model using test set, and finally use model to predict unknown value."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "<h1>Table of contents</h1>\n",
    "\n",
    "<div class=\"alert alert-block alert-info\" style=\"margin-top: 20px\">\n",
    "    <ol>\n",
    "        <li><a href=\"#download_data\">Downloading Data</a></li>\n",
    "        <li><a href=\"#polynomial_regression\">Polynomial regression</a></li>\n",
    "        <li><a href=\"#evaluation\">Evaluation</a></li>\n",
    "        <li><a href=\"#practice\">Practice</a></li>\n",
    "    </ol>\n",
    "</div>\n",
    "<br>\n",
    "<hr>"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "button": false,
    "deletable": true,
    "new_sheet": false,
    "run_control": {
     "read_only": false
    }
   },
   "source": [
    "### Importing Needed packages"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {
    "button": false,
    "deletable": true,
    "new_sheet": false,
    "run_control": {
     "read_only": false
    }
   },
   "outputs": [],
   "source": [
    "import matplotlib.pyplot as plt\n",
    "import pandas as pd\n",
    "import pylab as pl\n",
    "import numpy as np\n",
    "%matplotlib inline"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {
    "collapsed": true,
    "jupyter": {
     "outputs_hidden": true
    }
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "\u001b[0;31mDocstring:\u001b[0m\n",
       "::\n",
       "\n",
       "  %pylab [--no-import-all] [gui]\n",
       "\n",
       "Load numpy and matplotlib to work interactively.\n",
       "\n",
       "This function lets you activate pylab (matplotlib, numpy and\n",
       "interactive support) at any point during an IPython session.\n",
       "\n",
       "%pylab makes the following imports::\n",
       "\n",
       "    import numpy\n",
       "    import matplotlib\n",
       "    from matplotlib import pylab, mlab, pyplot\n",
       "    np = numpy\n",
       "    plt = pyplot\n",
       "\n",
       "    from IPython.display import display\n",
       "    from IPython.core.pylabtools import figsize, getfigs\n",
       "\n",
       "    from pylab import *\n",
       "    from numpy import *\n",
       "\n",
       "If you pass `--no-import-all`, the last two `*` imports will be excluded.\n",
       "\n",
       "See the %matplotlib magic for more details about activating matplotlib\n",
       "without affecting the interactive namespace.\n",
       "\n",
       "positional arguments:\n",
       "  gui              Name of the matplotlib backend to use ('agg', 'gtk',\n",
       "                   'gtk3', 'inline', 'ipympl', 'nbagg', 'notebook', 'osx',\n",
       "                   'pdf', 'ps', 'qt', 'qt4', 'qt5', 'svg', 'tk', 'widget',\n",
       "                   'wx'). If given, the corresponding matplotlib backend is\n",
       "                   used, otherwise it will be matplotlib's default (which you\n",
       "                   can set in your matplotlib config file).\n",
       "\n",
       "optional arguments:\n",
       "  --no-import-all  Prevent IPython from performing ``import *`` into the\n",
       "                   interactive namespace. You can govern the default behavior\n",
       "                   of this flag with the InteractiveShellApp.pylab_import_all\n",
       "                   configurable.\n",
       "\u001b[0;31mFile:\u001b[0m      ~/conda/envs/python/lib/python3.6/site-packages/IPython/core/magics/pylab.py\n"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "pylab?"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "button": false,
    "deletable": true,
    "new_sheet": false,
    "run_control": {
     "read_only": false
    }
   },
   "source": [
    "<h2 id=\"download_data\">Downloading Data</h2>\n",
    "To download the data, we will use !wget to download it from IBM Object Storage."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {
    "button": false,
    "deletable": true,
    "new_sheet": false,
    "run_control": {
     "read_only": false
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "--2019-10-02 07:46:36--  https://s3-api.us-geo.objectstorage.softlayer.net/cf-courses-data/CognitiveClass/ML0101ENv3/labs/FuelConsumptionCo2.csv\n",
      "Resolving s3-api.us-geo.objectstorage.softlayer.net (s3-api.us-geo.objectstorage.softlayer.net)... 67.228.254.193\n",
      "Connecting to s3-api.us-geo.objectstorage.softlayer.net (s3-api.us-geo.objectstorage.softlayer.net)|67.228.254.193|:443... connected.\n",
      "HTTP request sent, awaiting response... 200 OK\n",
      "Length: 72629 (71K) [text/csv]\n",
      "Saving to: ‘FuelConsumption.csv’\n",
      "\n",
      "FuelConsumption.csv 100%[===================>]  70.93K  --.-KB/s    in 0.04s   \n",
      "\n",
      "2019-10-02 07:46:36 (1.64 MB/s) - ‘FuelConsumption.csv’ saved [72629/72629]\n",
      "\n"
     ]
    }
   ],
   "source": [
    "!wget -O FuelConsumption.csv https://s3-api.us-geo.objectstorage.softlayer.net/cf-courses-data/CognitiveClass/ML0101ENv3/labs/FuelConsumptionCo2.csv"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "__Did you know?__ When it comes to Machine Learning, you will likely be working with large datasets. As a business, where can you host your data? IBM is offering a unique opportunity for businesses, with 10 Tb of IBM Cloud Object Storage: [Sign up now for free](http://cocl.us/ML0101EN-IBM-Offer-CC)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "button": false,
    "deletable": true,
    "new_sheet": false,
    "run_control": {
     "read_only": false
    }
   },
   "source": [
    "\n",
    "## Understanding the Data\n",
    "\n",
    "### `FuelConsumption.csv`:\n",
    "We have downloaded a fuel consumption dataset, **`FuelConsumption.csv`**, which contains model-specific fuel consumption ratings and estimated carbon dioxide emissions for new light-duty vehicles for retail sale in Canada. [Dataset source](http://open.canada.ca/data/en/dataset/98f1a129-f628-4ce4-b24d-6f16bf24dd64)\n",
    "\n",
    "- **MODELYEAR** e.g. 2014\n",
    "- **MAKE** e.g. Acura\n",
    "- **MODEL** e.g. ILX\n",
    "- **VEHICLE CLASS** e.g. SUV\n",
    "- **ENGINE SIZE** e.g. 4.7\n",
    "- **CYLINDERS** e.g 6\n",
    "- **TRANSMISSION** e.g. A6\n",
    "- **FUEL CONSUMPTION in CITY(L/100 km)** e.g. 9.9\n",
    "- **FUEL CONSUMPTION in HWY (L/100 km)** e.g. 8.9\n",
    "- **FUEL CONSUMPTION COMB (L/100 km)** e.g. 9.2\n",
    "- **CO2 EMISSIONS (g/km)** e.g. 182   --> low --> 0\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "button": false,
    "deletable": true,
    "new_sheet": false,
    "run_control": {
     "read_only": false
    }
   },
   "source": [
    "## Reading the data in"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {
    "button": false,
    "deletable": true,
    "new_sheet": false,
    "run_control": {
     "read_only": false
    }
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>MODELYEAR</th>\n",
       "      <th>MAKE</th>\n",
       "      <th>MODEL</th>\n",
       "      <th>VEHICLECLASS</th>\n",
       "      <th>ENGINESIZE</th>\n",
       "      <th>CYLINDERS</th>\n",
       "      <th>TRANSMISSION</th>\n",
       "      <th>FUELTYPE</th>\n",
       "      <th>FUELCONSUMPTION_CITY</th>\n",
       "      <th>FUELCONSUMPTION_HWY</th>\n",
       "      <th>FUELCONSUMPTION_COMB</th>\n",
       "      <th>FUELCONSUMPTION_COMB_MPG</th>\n",
       "      <th>CO2EMISSIONS</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <td>0</td>\n",
       "      <td>2014</td>\n",
       "      <td>ACURA</td>\n",
       "      <td>ILX</td>\n",
       "      <td>COMPACT</td>\n",
       "      <td>2.0</td>\n",
       "      <td>4</td>\n",
       "      <td>AS5</td>\n",
       "      <td>Z</td>\n",
       "      <td>9.9</td>\n",
       "      <td>6.7</td>\n",
       "      <td>8.5</td>\n",
       "      <td>33</td>\n",
       "      <td>196</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>1</td>\n",
       "      <td>2014</td>\n",
       "      <td>ACURA</td>\n",
       "      <td>ILX</td>\n",
       "      <td>COMPACT</td>\n",
       "      <td>2.4</td>\n",
       "      <td>4</td>\n",
       "      <td>M6</td>\n",
       "      <td>Z</td>\n",
       "      <td>11.2</td>\n",
       "      <td>7.7</td>\n",
       "      <td>9.6</td>\n",
       "      <td>29</td>\n",
       "      <td>221</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>2</td>\n",
       "      <td>2014</td>\n",
       "      <td>ACURA</td>\n",
       "      <td>ILX HYBRID</td>\n",
       "      <td>COMPACT</td>\n",
       "      <td>1.5</td>\n",
       "      <td>4</td>\n",
       "      <td>AV7</td>\n",
       "      <td>Z</td>\n",
       "      <td>6.0</td>\n",
       "      <td>5.8</td>\n",
       "      <td>5.9</td>\n",
       "      <td>48</td>\n",
       "      <td>136</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>3</td>\n",
       "      <td>2014</td>\n",
       "      <td>ACURA</td>\n",
       "      <td>MDX 4WD</td>\n",
       "      <td>SUV - SMALL</td>\n",
       "      <td>3.5</td>\n",
       "      <td>6</td>\n",
       "      <td>AS6</td>\n",
       "      <td>Z</td>\n",
       "      <td>12.7</td>\n",
       "      <td>9.1</td>\n",
       "      <td>11.1</td>\n",
       "      <td>25</td>\n",
       "      <td>255</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>4</td>\n",
       "      <td>2014</td>\n",
       "      <td>ACURA</td>\n",
       "      <td>RDX AWD</td>\n",
       "      <td>SUV - SMALL</td>\n",
       "      <td>3.5</td>\n",
       "      <td>6</td>\n",
       "      <td>AS6</td>\n",
       "      <td>Z</td>\n",
       "      <td>12.1</td>\n",
       "      <td>8.7</td>\n",
       "      <td>10.6</td>\n",
       "      <td>27</td>\n",
       "      <td>244</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   MODELYEAR   MAKE       MODEL VEHICLECLASS  ENGINESIZE  CYLINDERS  \\\n",
       "0       2014  ACURA         ILX      COMPACT         2.0          4   \n",
       "1       2014  ACURA         ILX      COMPACT         2.4          4   \n",
       "2       2014  ACURA  ILX HYBRID      COMPACT         1.5          4   \n",
       "3       2014  ACURA     MDX 4WD  SUV - SMALL         3.5          6   \n",
       "4       2014  ACURA     RDX AWD  SUV - SMALL         3.5          6   \n",
       "\n",
       "  TRANSMISSION FUELTYPE  FUELCONSUMPTION_CITY  FUELCONSUMPTION_HWY  \\\n",
       "0          AS5        Z                   9.9                  6.7   \n",
       "1           M6        Z                  11.2                  7.7   \n",
       "2          AV7        Z                   6.0                  5.8   \n",
       "3          AS6        Z                  12.7                  9.1   \n",
       "4          AS6        Z                  12.1                  8.7   \n",
       "\n",
       "   FUELCONSUMPTION_COMB  FUELCONSUMPTION_COMB_MPG  CO2EMISSIONS  \n",
       "0                   8.5                        33           196  \n",
       "1                   9.6                        29           221  \n",
       "2                   5.9                        48           136  \n",
       "3                  11.1                        25           255  \n",
       "4                  10.6                        27           244  "
      ]
     },
     "execution_count": 4,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df = pd.read_csv(\"FuelConsumption.csv\")\n",
    "\n",
    "# take a look at the dataset\n",
    "df.head()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Lets select some features that we want to use for regression."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {
    "button": false,
    "deletable": true,
    "new_sheet": false,
    "run_control": {
     "read_only": false
    }
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>ENGINESIZE</th>\n",
       "      <th>CYLINDERS</th>\n",
       "      <th>FUELCONSUMPTION_COMB</th>\n",
       "      <th>CO2EMISSIONS</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <td>0</td>\n",
       "      <td>2.0</td>\n",
       "      <td>4</td>\n",
       "      <td>8.5</td>\n",
       "      <td>196</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>1</td>\n",
       "      <td>2.4</td>\n",
       "      <td>4</td>\n",
       "      <td>9.6</td>\n",
       "      <td>221</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>2</td>\n",
       "      <td>1.5</td>\n",
       "      <td>4</td>\n",
       "      <td>5.9</td>\n",
       "      <td>136</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>3</td>\n",
       "      <td>3.5</td>\n",
       "      <td>6</td>\n",
       "      <td>11.1</td>\n",
       "      <td>255</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>4</td>\n",
       "      <td>3.5</td>\n",
       "      <td>6</td>\n",
       "      <td>10.6</td>\n",
       "      <td>244</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>5</td>\n",
       "      <td>3.5</td>\n",
       "      <td>6</td>\n",
       "      <td>10.0</td>\n",
       "      <td>230</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>6</td>\n",
       "      <td>3.5</td>\n",
       "      <td>6</td>\n",
       "      <td>10.1</td>\n",
       "      <td>232</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>7</td>\n",
       "      <td>3.7</td>\n",
       "      <td>6</td>\n",
       "      <td>11.1</td>\n",
       "      <td>255</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>8</td>\n",
       "      <td>3.7</td>\n",
       "      <td>6</td>\n",
       "      <td>11.6</td>\n",
       "      <td>267</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   ENGINESIZE  CYLINDERS  FUELCONSUMPTION_COMB  CO2EMISSIONS\n",
       "0         2.0          4                   8.5           196\n",
       "1         2.4          4                   9.6           221\n",
       "2         1.5          4                   5.9           136\n",
       "3         3.5          6                  11.1           255\n",
       "4         3.5          6                  10.6           244\n",
       "5         3.5          6                  10.0           230\n",
       "6         3.5          6                  10.1           232\n",
       "7         3.7          6                  11.1           255\n",
       "8         3.7          6                  11.6           267"
      ]
     },
     "execution_count": 5,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "cdf = df[['ENGINESIZE','CYLINDERS','FUELCONSUMPTION_COMB','CO2EMISSIONS']]\n",
    "cdf.head(9)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Lets plot Emission values with respect to Engine size:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {
    "button": false,
    "deletable": true,
    "new_sheet": false,
    "run_control": {
     "read_only": false
    },
    "scrolled": true
   },
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.scatter(cdf.ENGINESIZE, cdf.CO2EMISSIONS,  color='blue')\n",
    "plt.xlabel(\"Engine size\")\n",
    "plt.ylabel(\"Emission\")\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "button": false,
    "deletable": true,
    "new_sheet": false,
    "run_control": {
     "read_only": false
    }
   },
   "source": [
    "#### Creating train and test dataset\n",
    "Train/Test Split involves splitting the dataset into training and testing sets respectively, which are mutually exclusive. After which, you train with the training set and test with the testing set."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {
    "button": false,
    "deletable": true,
    "new_sheet": false,
    "run_control": {
     "read_only": false
    }
   },
   "outputs": [],
   "source": [
    "msk = np.random.rand(len(df)) < 0.8\n",
    "train = cdf[msk]\n",
    "test = cdf[~msk]"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "button": false,
    "deletable": true,
    "new_sheet": false,
    "run_control": {
     "read_only": false
    }
   },
   "source": [
    "<h2 id=\"polynomial_regression\">Polynomial regression</h2>"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "button": false,
    "deletable": true,
    "new_sheet": false,
    "run_control": {
     "read_only": false
    }
   },
   "source": [
    "Sometimes, the trend of data is not really linear, and looks curvy. In this case we can use Polynomial regression methods. In fact, many different regressions exist that can be used to fit whatever the dataset looks like, such as quadratic, cubic, and so on, and it can go on and on to infinite degrees.\n",
    "\n",
    "In essence, we can call all of these, polynomial regression, where the relationship between the independent variable x and the dependent variable y is modeled as an nth degree polynomial in x. Lets say you want to have a polynomial regression (let's make 2 degree polynomial):\n",
    "\n",
    "\n",
    "$y = b + \\theta_1  x + \\theta_2 x^2$\n",
    "\n",
    "Now, the question is: how we can fit our data on this equation while we have only x values, such as __Engine Size__? \n",
    "Well, we can create a few additional features: 1, $x$, and $x^2$.\n",
    "\n",
    "\n",
    "\n",
    "__PloynomialFeatures()__ function in Scikit-learn library, drives a new feature sets from the original feature set. That is, a matrix will be generated consisting of all polynomial combinations of the features with degree less than or equal to the specified degree. For example, lets say the original feature set has only one feature, _ENGINESIZE_. Now, if we select the degree of the polynomial to be 2, then it generates 3 features, degree=0, degree=1 and degree=2: "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {
    "button": false,
    "deletable": true,
    "new_sheet": false,
    "run_control": {
     "read_only": false
    }
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([[ 1.  ,  2.  ,  4.  ],\n",
       "       [ 1.  ,  2.4 ,  5.76],\n",
       "       [ 1.  ,  1.5 ,  2.25],\n",
       "       ...,\n",
       "       [ 1.  ,  3.  ,  9.  ],\n",
       "       [ 1.  ,  3.2 , 10.24],\n",
       "       [ 1.  ,  3.2 , 10.24]])"
      ]
     },
     "execution_count": 8,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "from sklearn.preprocessing import PolynomialFeatures\n",
    "from sklearn import linear_model\n",
    "train_x = np.asanyarray(train[['ENGINESIZE']])\n",
    "train_y = np.asanyarray(train[['CO2EMISSIONS']])\n",
    "\n",
    "test_x = np.asanyarray(test[['ENGINESIZE']])\n",
    "test_y = np.asanyarray(test[['CO2EMISSIONS']])\n",
    "\n",
    "\n",
    "poly = PolynomialFeatures(degree=2)\n",
    "train_x_poly = poly.fit_transform(train_x)\n",
    "train_x_poly"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "**fit_transform** takes our x values, and output a list of our data raised from power of 0 to power of 2 (since we set the degree of our polynomial to 2).\n",
    "\n",
    "$\n",
    "\\begin{bmatrix}\n",
    "    v_1\\\\\n",
    "    v_2\\\\\n",
    "    \\vdots\\\\\n",
    "    v_n\n",
    "\\end{bmatrix}\n",
    "$\n",
    "$\\longrightarrow$\n",
    "$\n",
    "\\begin{bmatrix}\n",
    "    [ 1 & v_1 & v_1^2]\\\\\n",
    "    [ 1 & v_2 & v_2^2]\\\\\n",
    "    \\vdots & \\vdots & \\vdots\\\\\n",
    "    [ 1 & v_n & v_n^2]\n",
    "\\end{bmatrix}\n",
    "$\n",
    "\n",
    "in our example\n",
    "\n",
    "$\n",
    "\\begin{bmatrix}\n",
    "    2.\\\\\n",
    "    2.4\\\\\n",
    "    1.5\\\\\n",
    "    \\vdots\n",
    "\\end{bmatrix}\n",
    "$\n",
    "$\\longrightarrow$\n",
    "$\n",
    "\\begin{bmatrix}\n",
    "    [ 1 & 2. & 4.]\\\\\n",
    "    [ 1 & 2.4 & 5.76]\\\\\n",
    "    [ 1 & 1.5 & 2.25]\\\\\n",
    "    \\vdots & \\vdots & \\vdots\\\\\n",
    "\\end{bmatrix}\n",
    "$"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "It looks like feature sets for multiple linear regression analysis, right? Yes. It Does. \n",
    "Indeed, Polynomial regression is a special case of linear regression, with the main idea of how do you select your features. Just consider replacing the  $x$ with $x_1$, $x_1^2$ with $x_2$, and so on. Then the degree 2 equation would be turn into:\n",
    "\n",
    "$y = b + \\theta_1  x_1 + \\theta_2 x_2$\n",
    "\n",
    "Now, we can deal with it as 'linear regression' problem. Therefore, this polynomial regression is considered to be a special case of traditional multiple linear regression. So, you can use the same mechanism as linear regression to solve such a problems. \n",
    "\n",
    "\n",
    "\n",
    "so we can use __LinearRegression()__ function to solve it:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {
    "button": false,
    "deletable": true,
    "new_sheet": false,
    "run_control": {
     "read_only": false
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Coefficients:  [[ 0.         50.87029686 -1.62115694]]\n",
      "Intercept:  [107.77861718]\n"
     ]
    }
   ],
   "source": [
    "clf = linear_model.LinearRegression()\n",
    "train_y_ = clf.fit(train_x_poly, train_y)\n",
    "# The coefficients\n",
    "print ('Coefficients: ', clf.coef_)\n",
    "print ('Intercept: ',clf.intercept_)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "As mentioned before, __Coefficient__ and __Intercept__ , are the parameters of the fit curvy line. \n",
    "Given that it is a typical multiple linear regression, with 3 parameters, and knowing that the parameters are the intercept and coefficients of hyperplane, sklearn has estimated them from our new set of feature sets. Lets plot it:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "Text(0, 0.5, 'Emission')"
      ]
     },
     "execution_count": 10,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.scatter(train.ENGINESIZE, train.CO2EMISSIONS,  color='blue')\n",
    "XX = np.arange(0.0, 10.0, 0.1)\n",
    "yy = clf.intercept_[0]+ clf.coef_[0][1]*XX+ clf.coef_[0][2]*np.power(XX, 2)\n",
    "plt.plot(XX, yy, '-r' )\n",
    "plt.xlabel(\"Engine size\")\n",
    "plt.ylabel(\"Emission\")"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "button": false,
    "deletable": true,
    "new_sheet": false,
    "run_control": {
     "read_only": false
    }
   },
   "source": [
    "<h2 id=\"evaluation\">Evaluation</h2>"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Mean absolute error: 24.00\n",
      "Residual sum of squares (MSE): 1030.72\n",
      "R2-score: 0.69\n"
     ]
    }
   ],
   "source": [
    "from sklearn.metrics import r2_score\n",
    "\n",
    "test_x_poly = poly.fit_transform(test_x)\n",
    "test_y_ = clf.predict(test_x_poly)\n",
    "\n",
    "print(\"Mean absolute error: %.2f\" % np.mean(np.absolute(test_y_ - test_y)))\n",
    "print(\"Residual sum of squares (MSE): %.2f\" % np.mean((test_y_ - test_y) ** 2))\n",
    "print(\"R2-score: %.2f\" % r2_score(test_y_ , test_y) )"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "<h2 id=\"practice\">Practice</h2>\n",
    "Try to use a polynomial regression with the dataset but this time with degree three (cubic). Does it result in better accuracy?"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Coefficients:  [[ 0.         27.21478957  4.86418839 -0.53510286]]\n",
      "Intercept:  [133.03445296]\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "<matplotlib.collections.PathCollection at 0x7f02781e9f60>"
      ]
     },
     "execution_count": 12,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAXcAAAD6CAYAAABamQdMAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4xLjEsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy8QZhcZAAAgAElEQVR4nO3dfZBc1Xnn8e8zrZHQgB0hoXglBCPWJtQKJ4uDik1WVVnHEmuHuMCuzabkEqzKuEpYQzZyXsplrf4w+UMbJ+W8UOUVFdlAlNKsCWt7KxRL/CLZlNcpO2QgGIMIZaWQsEAB8bZGhgASz/5xb2fu9NzXvvf2vd39+1R1zczp27fP9EhP3z7nOc8xd0dEREbLRNMdEBGR6im4i4iMIAV3EZERpOAuIjKCFNxFREaQgruIyAjKHdzNrGNmf29m94Y/32JmT5vZw+Htmsixu83sqJk9YWbvr6PjIiKSbEmBY3cBjwNvj7T9ibt/NnqQmW0AtgKXA2uBQ2b2M+5+NunEF1xwga9fv75AV0RE5MEHH3ze3VfH3ZcruJvZOuBXgb3Ab2ccfh1wl7u/DjxpZkeBq4DvJj1g/fr1zM3N5emKiIiEzOx40n15h2X+FPgk8FZP+2+Y2SNmdoeZnR+2XQj8KHLMibCtt1M7zGzOzOZOnTqVsxsiIpJHZnA3sw8Cz7n7gz133Qa8E7gCOAn8UfchMadZVOPA3fe7+0Z337h6deynChER6VOeYZlNwLXhhOk5wNvN7KC7X989wMw+D9wb/ngCuCjy+HXAMxX1V0REcsi8cnf33e6+zt3XE0yUftPdrzezNZHDPgw8Gn5/D7DVzJaZ2SXApcADFfdbRERSFMmW6fWHZnYFwZDLMeAmAHd/zMzuBo4AZ4Cb0zJlRESkeoUWMbn7/e7+wfD7G9z9Z93959z9Wnc/GTlur7u/090vc/e/rrrTIjK8Zmdh/XqYmAi+zs423aPRpBWqImNkZgaWLAGz4OvMzGCff3YWduyA48fBPfi6Y4cCfB0U3EXGxMwM3HYbnA0HSc+eDX4eZIDfswdefXVh26uvBu1SLWvDTkwbN250LWISqdeSJfOBParTgTNnBtOHiYngir2XGbzVu4pGMpnZg+6+Me4+XbmLjIm4wJ7WXoeLLy7WLv1TcBeRgdm7F6amFrZNTQXtUi0FdxEZmG3bYP9+mJ4OhmKmp4Oft21rumejp0yeu4gMkenpIDslrn2Qtm1TMB8EXbmLjAkNiYwXBXeRMaEhkfGi4C7SEoNYubltGxw7FqQdHjtWTWDXitN2UnAXaYGklZszM+0OnFpx2l5axCTSAuvXx092mi1c9DM11a6hlKR+T08HnwykXlrEJNJyTz0V39577dW2pfpJ/U5ql8FRcBfJqc6iW0VWaNYZOIuOn2vFaXspuIvkUHfRrbg0RYvbsJJygTMtePczfq70yhZz98ZvV155pYu0WafjHoS8hbdOp7rnOHjQfXra3Sz4unOn+9TUwuebmgqO6/f8aeebno7/Haeni/W73/5JccCcJ8RVTaiK5JB0FQ3xVQ7jzMwEk6FnzwaVGHfsgH370h8zOxuMsT/1VHDFvndv/5OpWZOfqtg4fDShKiOv7k0oOp1i7b3aUEs9a/JT4+ejRcFdht4gAueOHcXae+3fX6wdqs8hzwreGj8fMUnjNYO8acxdyhjEeLh7MAbefa5OJ/g5r7j+dW9J+h0DT5I15t49RuPnw4OUMXdducvQG9QmFPv2BTsWuQdfs8bLo/oZ1qk6h1y1ZcZL7uBuZh0z+3szuzf8eaWZfcPMfhh+PT9y7G4zO2pmT5jZ++vouEhX2fHwQehnWKeOMfC02jIqJTBaily57wIej/z8KeCwu18KHA5/xsw2AFuBy4EPAPvMrEX/zWTUlB0PH4RNm4KJ3qglS4L2JIMeA9fm1aMlV3A3s3XArwJfiDRfBxwIvz8AfCjSfpe7v+7uTwJHgauq6a7IYvv2wc6d81fqnU7wc5Fhk7rt2bN4E+ozZ9IDZ9wwyvbtwWPqKCSmUgKjJe+V+58CnwSi2a7vcPeTAOHXnw7bLwR+FDnuRNi2gJntMLM5M5s7depU4Y6LRJUZDx+EfgNndBhl7144cKC+YROlQo6WzOBuZh8EnnP3B3OeM265x6KlEe6+3903uvvG1atX5zy1yHCqInDWPWyiVMjRkufKfRNwrZkdA+4C3mdmB4FnzWwNQPj1ufD4E8BFkcevA56prMciQ6iKwFn3sEld2TRbtgTn6962bKmmv5IuM7i7+253X+fu6wkmSr/p7tcD9wDbw8O2A38Vfn8PsNXMlpnZJcClwAOV91xkiFQROAcxbFL1Tk1btsDhwwvbDh9WgB+EMnnunwGuNrMfAleHP+PujwF3A0eArwI3u3vFGcciw6ds4BzGYZPewJ7VPk7qLpmhwmEiQ6TKQmKDUEXBtVHULZnRq2iWlwqHieQwDBs917HBtQxeP7WGilJwF2F4V2e2/Q1p8+Zi7eNiECUzFNxFaMfqzKKBuo43pKozWw4dWhzIN28O2sfZIEpmKLiL0MzqzGgQNYPrry8WqPt5Q0oL3nVlthw6tLCu5bgHdhhMyQwFdxEGvzozbaKxKytQx+2qlNaeFbyV2TI4gyiZoWwZEeaHOKJXwlNT9ZXEzRPcu8clbXG3ZEn8GG2ns7iOTdZzuiuzZRgpW0YkQ1trnad9chhUHXsZTkuyDxEZD9u2NR/Mo7IWKE1PJ294LaIrd5FQW9IK835y2LsXJicXtk1OJr8hKC1xvOjKXYTFY+7dbBWo52o+aYy76Nh27znSxs0PHVo8qRpNS+x0ksfwZfjoyl3GQtZVeRN57nHbXxexZw+88cbCtjfeSO9zWlriMOxoJfkpuMvIy7PYpw27EBUtJFV1n6tKz6u7IJbk5O6N36688koXqcv0dNw1ctDetWpV/DGrVtXXr5073Tud+Oft3nbuLPd7DdrOncV/D+kfMOcJcVVX7jLy2nBV3qtbFTArbTGtkFQbSwAPoiCW5KPgLiMvz+rTF1+MPyapvay8we7s2eS5giZy87PmLpR73x4K7jLy8lzhDqL8QDQwFgl2aXMFVZcA7h0v37Jlvs8XXAA33pjen0EUxJKcksZrBnnTmLvU7eDBYCzaLPh68ODi+6emFo4TT04GY+5Jjyn6/L3n7/fW6eTvU3Rcv9NJH/tOGi/PukXH+DXmPlikjLk3HthdwV1aIvoGsGqV+9KlCwPU1FT/AT5p8rPsLa1PRQNt1uRu0s1s8fPmfUORctKCuwqHicRYvz55af+xY8XPNzFRX/GtTicYlunddi+psFj0cTt2zKc65i1m1qvf10TKU+EwkYL6ybBJy++uq3QwBAHcwzHwG2+cHwPPGtc/ezbI2On2s59x8aazcySZgrtIjHPPLdbem9rYGzjf9a7q+xjnjTdg167g+7zBupu5k2cl6uQkrFrVrsqZEi8zuJvZOWb2gJl938weM7PfC9tvMbOnzezh8HZN5DG7zeyomT1hZu+v8xcQqcPp08Xas/K7778//v5OJ7jqPnhwcUZPv154Ifiat2xA9w0pboXq5s0LUy3vvBOef14bdA+DzDF3MzPgXHc/bWaTwHeAXcAHgNPu/tme4zcAXwSuAtYCh4CfcffED4kac5c2mJ0N6rI89VT6+HjcfVVshBF9/osvDt5IuoE6qjvGnqePMzPBG0zW2Hvc5h7SfqXG3MNJ2e71ymR4S3tHuA64y91fd/cngaMEgV5kYMpuNl1UVn53nvzv3pz1W2+Nz88/cCA4ZtWq+HNG2/ftCwK3e3BVHid6hd+WssdSgaQ0mugN6AAPA6eBPwjbbgGOAY8AdwDnh+2fA66PPPZ24NfSzq9USKlSXE55Vhpj3lTFc86Jf/yGDfHHb9gQ3N9v/ndafv7Bg0Eufm9uftrvmZam2M/rJs2iqjx3YAXwLeDdwDvCoD8B7AXuCI/5HzHB/T/FnGsHMAfMXXzxxYN7NWTk9VNQyyxfcE8qJJaUI97pzB/TG1iXL1947Nq1xX/XrMVZRbSxEJmkSwvuhfPczezTwE88MtZuZuuBe9393Wa2O/xE8PvhfV8DbnH37yadU2PuUqWknPK0zaaT8trznqPo5tIXXgjPPLO4fe1aePrp7H7UoZ/XTZpVaszdzFab2Yrw++XAFuAfzGxN5LAPA4+G398DbDWzZWZ2CXAp8ECZX0CkiH7qxMTVnyl6jiLiAnta+yAMor6ODE6ePPc1wLfM7BHg74BvuPu9wB+a2Q/C9l8GfgvA3R8D7gaOAF8FbvaUTBmRqvVTCre3wuKqVbB0abFzNKHKCdC9e+O37Wvb7yw5JY3XDPKmCVWpWu9YdO+E5+bN2ecoUiMlbZy+iuOTfscqJ0CzJoWlfdBmHTLqepf+/83fzKcVvutdcOTIwuMPHw7K2SaZnQ1SDqMrTg8cqC41cO3aYu1xqt73tfc1ymqXdlNwl1bkNpfpQ9bS/8OH4x+X1A71b5j99NOwfPnCtuXLi02mtnGHKWkPBfcxl2fz6Lb3oY6t3eoOnDMz8NprC9tee63YZtKaAJU0Kvk75qoubdtEH6pY+l+2T0WfI6kcb5FSAN03xegnjKmp/ot59fM6SbNU8lcSteGjfdk+ZC3t37w5/v7e9ujQ0OnTQQXEqCqzZarYa7TqPVSTyhMktUu7KbiPuTZ8tM/Th7Qx+aTqh932Q4cWB/LNm4P26PmjQ0MvvLDwqr/Tge3bkwNn0lVvUntVe40W3UO1DfMrMiBJaTSDvCkVsjltqCeS1Yc8fSy7tVue2jJpr0vR1MYm9hrNeh3zlFCQdkF7qEqaNux5mVYjpYqaJ1k1WPLWlkl6zn76WMXrXqS2TFYfq8i9l8FScJdEbbhy7/YjKUglBd7ejZnTzp31O+atCpn0nE28jkWfM+t1LPs6y+ApuEuiNlQCzApSq1bF9zGpQmOvPL9jXB+Kvi5VVmjMo+jfTlfuoyctuGtCdcy1IVum7gVDeX7HuNoyvdkyk5NBFk3SZGTRyc2yiv7t+qm5I8NLwX3M1ZEtUzQjIytIxW01l9bea+XKfO3R4Pz888F+odFgbzafRVPFYq+pqeCc3VvRPVSL/u2qSJ3csmVhn9NKOEjDki7pB3nTsExzqh4rrnIXpKqGC5Yti3/ssmX5f6+qh696N+ro3pYvz3+Oqv92WWPumzfH35+nCJvUA425S5qmd/PJClJlg3sVY8l5JhvrrCKZpMq/XVZ6psbk2yctuGtYRiodK04aYjl+PHmoJmu4YCLhX2lSex2yhnayipcNg337gtWo0U29d+4M2mX4qLaMVCqpJotZcI3XVaQGynnnwU9+srj93HODCc4sVWwfd8EF8WP8q1YF4/NFa8VUUcel6toyWVR7pn1UW0YGJi4jozewQ7FsmN5Mmqz2Xh//eLH2OC++mN5etFZMb7nfpPa0yem6s4x65a3RIy2RNF4zyJvG3EdL0sRb0i1rfLpsnrt7feUJunMJ/SwA6p1U7Z1MPXjQfenShccsXTo/rt7EoqPev60mU5uFJlRlUJIm5fLckgJunuBe9wKirEnf886L7+N55/X/nFm/dx3PKcMlLbhrWEYqrRRYZoOMpMdm5bnXteFI9HXZsyeoCpk06Zs09p9nTiBJ1u8dNw/RfU5VfZTGr9pdV+6NqjpXut+r9rSUuqxqhXWUUCj6utSRJph1zjyvZxN1gmRwSLlyz8yWMbNzgG8Dy4AlwJfc/dNmthL4S2A9cAz4dXd/KXzMbuBjwFngN939a2nPoWyZ5lS9E1NS1kge/WaWVJEN06vunZjy6HTi+z8xEbzGeV/rQe6qJYNVNlvmdeB97v5vgSuAD5jZLwCfAg67+6XA4fBnzGwDsBW4HPgAsM/MCm5BIIMSF8DS2rMkbZxR5rGrVqW311FCIS1fv6ohj5mZIECbBV97c+KT3pi67e99b77n0YbZ4ykzuIdX/92Rw8nw5sB1wIGw/QDwofD764C73P11d38SOApcVWmvpTJV7QjUtWlT8cVFnU6QTnffff0FzqoKYkWDbdrVdndc/6Mfne/nihXxxya1V7Ho6ejRfMdpw+wxlTReE70BHeBh4DTwB2Hbyz3HvBR+/RxwfaT9duDX0s6vMffmVD1WnLcuevQ5qig/UDZbpt8sn2jGzooVC+9bsSL5+fLsepT1e+fZYERj7qONstky7n7W3a8A1gFXmdm7Uw6PG31cdB1kZjvMbM7M5k6dOpWnG1KD6ens9iLZNEWGALqfDqpYjFO2hEJalk/aeHo0o+Vzn1uYTfO5zyU/ruwG2RMTyZ+QOp3+qz5qj9URkhT1k27Ap4HfBZ4A1oRta4Anwu93A7sjx38N+MW0c+rKvTlZxaKKZo30LrrJc+WetRinik8XWVfVZTJTuq9T2oKjXnl+p34+SUT/dkW1ZVcuyY+S2TKrgTfd/WUzWw58HfgD4D8AL7j7Z8zsU8BKd/+kmV0O/E+Ccfa1BJOtl7p74jWJsmWak1W3pcqskTju2c9RNhPl/PPh5ZcXt69YAS+9FHyfVRvmbW+Lz1k/7zx45ZXs2jO98vxOSefM0m92TNWZU1K/stkya4BvmdkjwN8B33D3e4HPAFeb2Q+Bq8OfcffHgLuBI8BXgZvTArs0K2khTLe97p2aJiaCoLl06cL26IRoUiBMC5DRydG4wA4L25Mydbrty5bF399tL7uhSJX6/du0YVcuqVDSJf0gbxqWya9sjZReWcMDRRcI9TuU0OkEk5NxE6JFh2WKTI7mfW2rHjrKc3yeCdMif5ssbdhPV4pBtWVGQ9b4eD8mJuLPOTER3F90HDYpCyTPLakQWFYfy/Qhr6p3i8pT9Kto5lHW3yaLxtyHj4L7iMiTPldUnq3TiqQZJhW7KhNsqzw+ektLVexV9W5RBw/GHxt9beOec+nShZ9wdu6stmBa3QXYpFoK7g2q8j9LFVegvap+wygT2KsK7nmGM+ICe9bfKu3+fv42ef5tKNhKGgX3hlT9Mbfo8EQeVb9hlBmWSapDXrSee1Ip3OgbV+9QVtm/lTaPliakBXeV/K1R1Tvl5N29p0n9Fg2DIBzGueKKYu1JGUBdcUv9y/6tDh2CtWsXtq1dG7SLNEHBvUZVp5aV3W5uEJJWvJZx//3F2vPWUomuSi1bKGxmBp55ZmHbM8+k14rJKhwmUoaCe42qrlZYR/XDqr3rXdWfs+hS/bhCYlmPT3sN3RcXCuuVVL4gqb2KwmF1UPmBEZI0XjPI2yiPuRdZkp7nfHnGhYtMwlU95t5vbnbaWHU/k77R1yBt7D16fO9rW2Scv+jrWEfmU1lKhRw+aEK1GQcPuk9OLvzPMjlZ7j9LnoyOJncQqiKw9wb4svn9eR+f5w2hqmBd9eteBS1iGj4K7g1p4j9LlStK+1FlcI/2oejK3N7jN2wo9viir0vRN6A2XrnnWVgl7aLg3pAm/rMUDUrDEtyLqGIlb9H0y+7z5n0DqWO1cVm6ch8+acFdE6o1amICtOjOSnnaeyfZZmbaPel2223F2uMUTb8E2LcvqCDpHnzdty//87VBVTtaSUskRf1B3kb1yr2JhS1VX7nnmWjMuwy/6K3f16mKTwJ1LBiLauOwjLtWxA4bdOXejKL52VXIs7NSVNaVe9zinl5lFmYl2by52QVAWZtTxymSRlh2J6a6lN3RStpDwb1GTfwHLvrROquPeRdcVVXzu3sNWyaw91P/vazZ2SAP/vjxoP9ZefFVb0wu0kvBfcRs2xYsnInu5Vl0H82ovPMDK1f2d/46fPzjxdqrsGsXvPnmwrY33wza42RtDiJSloJ7y/UzmVnlR+u9e2Fysv/HN2HfPti5c/4quNMJfq5zgrPoTkxN9FHGTNJg/CBvozqhWnZiL89k5sREvWWE41bZxt3y7EiU59aWibyqJ6aHhSZUhwuaUG3GqlXF2nvlmcx86y246aZi/Spizx54443s46oalumOV+/Y0WyKZdG/Xdm/dRvMzgave3TeoOm/g/RPwb1Gt966eOPnpUuD9jzyTlJmlbgto6nNkevIwCmi6N+u7N+6DaouUS3NUnCv0bZtcMcdCyc377gj/xj4smX19i+PvBOqL75Y/XMfP179OfMq+rcr+7dug6pLVEuzMoO7mV1kZt8ys8fN7DEz2xW232JmT5vZw+HtmshjdpvZUTN7wszeX+cv0HZlJjf/+Z/zHTfR81essmzrNddkHwP1rLqtM3Uxj6J/u2HPER+GktKS35Icx5wBfsfdHzKztwEPmtk3wvv+xN0/Gz3YzDYAW4HLgbXAITP7GXdveHnG6IqOuXfHTbsfr7vjptBfsLnvvnzH5X0TKMK9+nNKsr17F/7bAZUfGGaZV+7uftLdHwq/fwV4HLgw5SHXAXe5++vu/iRwFLiqis4Oozo3P4hLn6t63DTvR/K8bwLSXlWvkZBm5bly/xdmth54D/C3wCbgN8zsvwBzBFf3LxEE/u9FHnaC9DeDkTU7CzfcMH8Fevx48DPk+w9zzjnxQzPnnAOvvRb/mKrHTVeuTM7Vjjp+vPlhFClv2zYF81GRe0LVzM4Dvgx8wt1/DNwGvBO4AjgJ/FH30JiHL/qAbWY7zGzOzOZOnTpVuOPD4MYbFw8tuAfteWzaVKwdio+bNrFUX0Tqlyu4m9kkQWCfdfevALj7s+5+1t3fAj7P/NDLCeCiyMPXAT1bB4O773f3je6+cfXq1WV+h9ZKyg/PkzcO8M1vFmuH4rVlksa1u+11ZMGISP3yZMsYcDvwuLv/caR9TeSwDwOPht/fA2w1s2VmdglwKfBAdV0eH1mBN07V46ZJi5MmJnR1L9JmecbcNwE3AD8ws4fDtv8GfMTMriAYcjkG3ATg7o+Z2d3AEYJMm5uVKVM9s2BCdceOxfVIBjFuev758PzzCvAibZUnW+Y77m7u/nPufkV4u8/db3D3nw3br3X3k5HH7HX3d7r7Ze7+1/X+CuPr7Nlgd6GZmYXtRTJ0zjknvT1pWKbbvnZtkR4XM0xL90XaRitUW2zz5nzH7d8//33R+iBZk7ZZE7T/9E/5+ljU5ORwLd0XaRsF9xY7ejTfcdENN4rmuWftFhVX8ndycn6CNm1noiI2bFg4T3DnnUrJEylDwT1DnYuQsuStrRLdvSfpMUnteXaL6h1Xr2Oc/ciRYJXrsC7dF2kb8xas8d64caPPzc013Y1FepfyQ5BWmDf7JC0I5nnZ8wbRDRvgscf6e86s49evj39jmJ4OgvCSJdVtG9jpwJkz1ZxLZByY2YPuvjHuPl25p6izBGqVnwSeeKL8OZJkrXit8tqg6c2hRUaJgnuKOkugVrkZQjQoVr3xctaEalVj7qDNoUWqpOCeYhAlUKv4JBAt+XvZZfHHJLVnyVrxWmVA1ubQItVRcE+RlSlSlbKfBJYvn/8+aYim36GbrBWvVQRkbQ4tUr1CVSHHUVzhr6qV/SQQ3WYvT/ZLUWkrXjdtgs9/vv+J0BbM54uMJF25p9i1a3HQOnMmaK9K1ZshVD3mnmXPnv4De52rW0XGnYJ7iqQ65nnqm2epazOEpGGSusazywwpPftsdf0QkYU0LNOQKrNMorrj1vv3B0MxScXFqnLxxf1vZK3UR5H66Mq9pJmZYCGPWfC1t4hXE/btC4ZK3IOvdU5UxmXT5KXUR5H6KLinOO+89PaZmaAqY/cKNKlKY5uVHaPvzaYpQqmPIvUZ6+CeVTcma7OMaDXGqKT2QSlSD+e97y3WHmfbtqAUwVtvBaUQ4qxYMf+GodRHkfqN7Zh7b92Y7mpRmJ/gjKYYRnXb60g7LCvP7xX1ve8tbktrz5L0mv3UT8FLL/V3ThEpbmwLh2UVxILsolpJRbO6BbAGVTgser48v1fe5+jnn8bERHKBsromkUXGlQqHxchTN+bcc+OP6bYPOu0wSXRTjzrr4eSRtOdqUruI1GNsg3ueujFZwzKbNgVX71FLliTvbjQIRevhTCT8C0hqF5HhMLb/hbMKYuURtzrzzJlqSgIXcfjw/PdFf6+bbirWniVrz1URGYyxDe5ZBbHyKLrr0SAU/b327QsyV6rKZBlEJU0RyZY5oWpmFwF/Afwr4C1gv7vfamYrgb8E1gPHgF9395fCx+wGPgacBX7T3b+W9hxt3Ykpa7Kx04mfJJyYCCZay05Wnn8+vPxy9nF5zzcI3dz/Xkp9FKle2QnVM8DvuPu/AX4BuNnMNgCfAg67+6XA4fBnwvu2ApcDHwD2mdlIrkVMyv6oKivklVeqOc8g3XdfsXYRqUdmcHf3k+7+UPj9K8DjwIXAdcCB8LADwIfC768D7nL31939SeAocFXVHR8Hw1h7pelsHREJFBpzN7P1wHuAvwXe4e4nIXgDAH46POxC4EeRh50I21qnyEpOyUdj7iLtkDu4m9l5wJeBT7j7j9MOjWlbNCJsZjvMbM7M5k6dOpW3G5XpruQ8frza/UzzGtU3lCqykESkvFzB3cwmCQL7rLt/JWx+1szWhPevAZ4L208AF0Uevg54pvec7r7f3Te6+8bVq1f32/++7dkzv0S/q4r9TPNq4g1lEKrIQhKR8jKDu5kZcDvwuLv/ceSue4Dt4ffbgb+KtG81s2VmdglwKfBAdV2uRlvSGAf5hpKk6uGpaCGxY8cU2EWakOfKfRNwA/A+M3s4vF0DfAa42sx+CFwd/oy7PwbcDRwBvgrc7O5DODWYrXd1alZ7kqTJxqTyB72KltqNqmN4asuWoE/d25Yt/Z9LRPoztoXD8uSgZx1T5v6opKJeW7YsXH2a5Nxz4fTpfM/Vq2ihsSxJfd68GQ4dKn4+EUmWluc+tiV/00xMDC67I22y8f77850jqQZOHlWnLia9GeV5kxKR6oxt+YE03eGJOuWZbBxEnrtSF0VG09gG96QdgwYlz2Rj3q3uylRwVOqiyGga2+B+5EjTPciWd6u7MuUOqk5djNaWz9MuIvUY2+A+DI4ezXfc9HS556kydfHQocWBXJOpIoOnCdUWyzOpuXRp+4ZQFMhFmqcr9xbLM6nZgkxWEWkhBfcWi5vs7PXmm82vcO2lgmwizdOwTIt1x7737AmGaJKu0pvc+anX7CzceLLsadIAAAozSURBVCO88Ubw8/Hjwc+gMgQig6QVqn3KsxPTxER8QDbrL8Ol7M5Og3DBBfDCC4vbV62C558ffH9ERlnZnZhGUpnc8K6snZg+/vH4+5PaR0FcYE9rF5F6jG1wL5Mb3l1ctGpV/P3d9qo3n056Q6rijUpERsvYhoUywzJ5FxdVLanPZYeYqpT1hicigzG2wT1vOd043cVFWUMQMzNw223zNWLOng1+npnp73mTas20aa/VW2+FycmFbZOTQbuIDM7YBvcqKikm1X7ptv/Zn8Xfn9Q+CrZtgzvvXFjO4M47lSkjMmhjmwq5cmX/k3zdxUVZV9JZE65FTUwkZ+e0ybZtCuYiTWtZWKhWHYtpohUTBz3BedNNxdpFZHyNbHDP2j7uxRfznyupYmLVV+ZZqs6+EZHRNbKLmLK2j0u6P+n4OGW34RMRKWMsFzFlbR93zTXZ59CmFSIyrIY6uKeNqWdtH3ffffH3dzoLh2Ag+TmyxtyV8y0iTckM7mZ2h5k9Z2aPRtpuMbOnzezh8HZN5L7dZnbUzJ4ws/fX1fGsMfWs7eOSruzfemt+0wpIf46sMXflfItIY9w99Qb8EvDzwKORtluA3405dgPwfWAZcAnwj0An6zmuvPJKL2p62j0IuQtv09Pzxxw8GPxsFnw9eLDY47OOKdsHEZEygDlPiKuZV+7u/m0gb27JdcBd7v66uz8JHAWuKvBek1vWmHqWPBtDZz1HnnNUuYWdiEheZcbcf8PMHgmHbc4P2y4EfhQ55kTYVrmkTSy67VnDNnk2hs4at696c2kRkar0G9xvA94JXAGcBP4obI9L/otN+jOzHWY2Z2Zzp06dKtyB115Lb9+zB159deF9r766cNeirKvqNlyZa1cjEelHX8Hd3Z9197Pu/hbweeaHXk4AF0UOXQc8k3CO/e6+0d03rl69unAfsiYzyw7bQPNX5t1djaKfPm68UQFeRLL1FdzNbE3kxw8D3Uyae4CtZrbMzC4BLgUeKNfFeFlFu7KGVPJqcsx816757eq63ngjaBcRSZMnFfKLwHeBy8zshJl9DPhDM/uBmT0C/DLwWwDu/hhwN3AE+Cpws7vXUpB2x4709jxDKm2nXY1EpF95smU+4u5r3H3S3de5++3ufoO7/6y7/5y7X+vuJyPH73X3d7r7Ze7+13V1PKvOyrZtsH37wvu3bx/8ZGddY+YagxeRNEO9QnXfPjhzJhiPPnNmYQGt2Vk4cGDhRhkHDqQHw6oDcVbGTpa0laz9nE9ExsfYFg7r1Q3E0QybqalyE6hF+xDXp49+FN58M/24vOcTkdGSVjhsZIP7xER85UWz+EybsoG4ij7EmZ0N0jefeiq5kmSR84nI6BjLqpBFs2WqSJ0s24c40Wyd6eny5xOR8TCywb1otkxVqZNl+jDo84nI6BrZ4F50AVIdgbPqRVBNL6oSkeExssEdii1A6jdwDro8gAqRiUgeIx3cs/QGZigWOLNSHcumQoqI9Gtks2WyVJH62O8+rUpdFJEqjGUqZJYqAm9WqmMVqZAiIknGMhUySxWpj1kZNnVk4IiI5DG2wb2KwJuVYaPURRFpytgG9yoCb1aGjVIXRaQpYzvmDguX9l98cRDYFXhFZFikjbkvGXRn2mTbNgVzERlNYzssIyIyyhTcS8paoaoNrkWkCQruEUUDsVaoikhbjfWEalQ/K1a1QlVEmqQVqjn0E4i1QlVEmqQVqjn0s2JVK1RFpK0yg7uZ3WFmz5nZo5G2lWb2DTP7Yfj1/Mh9u83sqJk9YWbvr6vjVesnEGuFqoi0VZ4r9z8HPtDT9ingsLtfChwOf8bMNgBbgcvDx+wzs05lva1RP4FYK1RFpK1yjbmb2XrgXnd/d/jzE8B73f2kma0B7nf3y8xsN4C7/3543NeAW9z9u2nnb8OYO2jFqogMlzpWqL7D3U8ChAH+p8P2C4HvRY47EbYNBa1YFZFRUfWEqsW0xX40MLMdZjZnZnOnTp2quBsiIuOt3+D+bDgcQ/j1ubD9BHBR5Lh1wDNxJ3D3/e6+0d03rl69us9uiIhInH6D+z3A9vD77cBfRdq3mtkyM7sEuBR4oFwXRUSkqMwxdzP7IvBe4AIzOwF8GvgMcLeZfQx4CvjPAO7+mJndDRwBzgA3u/vZmvouIiIJMoO7u38k4a7NCcfvBZTJLSLSoFaUHzCzU0DM4v/cLgCer6g7dVEfq6E+VkN9rEbTfZx299hJy1YE97LMbC4p17Mt1MdqqI/VUB+r0eY+qraMiMgIUnAXERlBoxLc9zfdgRzUx2qoj9VQH6vR2j6OxJi7iIgsNCpX7iIiEqHgLiIygoY6uMdtJNI2ZnaRmX3LzB43s8fMbFfTfeplZueY2QNm9v2wj7/XdJ/imFnHzP7ezO5tui9JzOyYmf3AzB42s+brWMcwsxVm9iUz+4fw3+UvNt2nKDO7LHz9urcfm9knmu5XLzP7rfD/y6Nm9kUzO6fpPkUN9Zi7mf0ScBr4i26t+bYJC6utcfeHzOxtwIPAh9z9SMNd+xdmZsC57n7azCaB7wC73P17GQ8dKDP7bWAj8HZ3/2DT/YljZseAje7e2sU3ZnYA+L/u/gUzWwpMufvLTfcrTrjZz9PAv3P3MgsdK2VmFxL8P9ng7q+FZVfuc/c/b7Zn84b6yt3dvw282HQ/0rj7SXd/KPz+FeBxWlbj3gOnwx8nw1ur3vXNbB3wq8AXmu7LMDOztwO/BNwO4O5vtDWwhzYD/9imwB6xBFhuZkuAKRIq4DZlqIP7sAl3tHoP8LfN9mSxcMjjYYLyzd9w97b18U+BTwJvNd2RDA583cweNLMdTXcmxr8GTgF3hkNcXzCzc5vuVIqtwBeb7kQvd38a+CxB4cSTwP9z968326uFFNwHxMzOA74MfMLdf9x0f3q5+1l3v4KgBv9VZtaaYS4z+yDwnLs/2HRfctjk7j8P/Apwczh02CZLgJ8HbnP39wA/IdwDuW3CIaNrgf/VdF96mdn5wHXAJcBa4Fwzu77ZXi2k4D4A4Tj2l4FZd/9K0/1JE35Ev5/Fm6I3aRNwbTiefRfwPjM72GyX4rn7M+HX54D/DVzVbI8WOQGciHwy+xJBsG+jXwEecvdnm+5IjC3Ak+5+yt3fBL4C/PuG+7SAgnvNwsnK24HH3f2Pm+5PHDNbbWYrwu+XE/zD/YdmezXP3Xe7+zp3X0/wMf2b7t6qqyQAMzs3nDQnHOr4j0CrMrnc/Z+AH5nZZWHTZoL9F9roI7RwSCb0FPALZjYV/h/fTDCf1hpDHdzDjUS+C1xmZifCzUPaZhNwA8HVZje165qmO9VjDfAtM3sE+DuCMffWphu22DuA75jZ9wl2IPs/7v7VhvsU578Cs+Hf+wrgvzfcn0XMbAq4muCKuHXCTz5fAh4CfkAQS1tVimCoUyFFRCTeUF+5i4hIPAV3EZERpOAuIjKCFNxFREaQgruIyAhScBcRGUEK7iIiI+j/A7O+AJ4l2KbLAAAAAElFTkSuQmCC\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "# write your code here\n",
    "poly3 = PolynomialFeatures(degree=3)\n",
    "train_x_poly3 = poly3.fit_transform(train_x)\n",
    "clf3 = linear_model.LinearRegression()\n",
    "train_y3_ = clf3.fit(train_x_poly3, train_y)\n",
    "print ('Coefficients: ', clf3.coef_)\n",
    "print ('Intercept: ',clf3.intercept_)\n",
    "plt.scatter(train.ENGINESIZE, train.CO2EMISSIONS,  color='blue')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Mean absolute error: 24.07\n",
      "Residual sum of squares (MSE): 1032.53\n",
      "R2-score: 0.69\n"
     ]
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "XX = np.arange(0.0, 10.0, 0.1)\n",
    "yy = clf3.intercept_[0]+ clf3.coef_[0][1]*XX + clf3.coef_[0][2]*np.power(XX, 2) + clf3.coef_[0][3]*np.power(XX, 3)\n",
    "plt.plot(XX, yy, '-r' )\n",
    "plt.xlabel(\"Engine size\")\n",
    "plt.ylabel(\"Emission\")\n",
    "test_x_poly3 = poly3.fit_transform(test_x)\n",
    "test_y3_ = clf3.predict(test_x_poly3)\n",
    "print(\"Mean absolute error: %.2f\" % np.mean(np.absolute(test_y3_ - test_y)))\n",
    "print(\"Residual sum of squares (MSE): %.2f\" % np.mean((test_y3_ - test_y) ** 2))\n",
    "print(\"R2-score: %.2f\" % r2_score(test_y3_ , test_y) )"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Coefficients:  [[ 0.         27.21478957  4.86418839 -0.53510286]]\n",
      "Intercept:  [133.03445296]\n",
      "Mean absolute error: 24.07\n",
      "Residual sum of squares (MSE): 1032.53\n",
      "R2-score: 0.69\n"
     ]
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "poly3 = PolynomialFeatures(degree=3)\n",
    "train_x_poly3 = poly3.fit_transform(train_x)\n",
    "clf3 = linear_model.LinearRegression()\n",
    "train_y3_ = clf3.fit(train_x_poly3, train_y)\n",
    "# The coefficients\n",
    "print ('Coefficients: ', clf3.coef_)\n",
    "print ('Intercept: ',clf3.intercept_)\n",
    "plt.scatter(train.ENGINESIZE, train.CO2EMISSIONS,  color='blue')\n",
    "XX = np.arange(0.0, 10.0, 0.1)\n",
    "yy = clf3.intercept_[0]+ clf3.coef_[0][1]*XX + clf3.coef_[0][2]*np.power(XX, 2) + clf3.coef_[0][3]*np.power(XX, 3)\n",
    "plt.plot(XX, yy, '-r' )\n",
    "plt.xlabel(\"Engine size\")\n",
    "plt.ylabel(\"Emission\")\n",
    "test_x_poly3 = poly3.fit_transform(test_x)\n",
    "test_y3_ = clf3.predict(test_x_poly3)\n",
    "print(\"Mean absolute error: %.2f\" % np.mean(np.absolute(test_y3_ - test_y)))\n",
    "print(\"Residual sum of squares (MSE): %.2f\" % np.mean((test_y3_ - test_y) ** 2))\n",
    "print(\"R2-score: %.2f\" % r2_score(test_y3_ , test_y) )"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "jupyter": {
     "source_hidden": true
    }
   },
   "source": [
    "Double-click __here__ for the solution.\n",
    "\n",
    "<!-- Your answer is below:\n",
    "\n",
    "poly3 = PolynomialFeatures(degree=3)\n",
    "train_x_poly3 = poly3.fit_transform(train_x)\n",
    "clf3 = linear_model.LinearRegression()\n",
    "train_y3_ = clf3.fit(train_x_poly3, train_y)\n",
    "# The coefficients\n",
    "print ('Coefficients: ', clf3.coef_)\n",
    "print ('Intercept: ',clf3.intercept_)\n",
    "plt.scatter(train.ENGINESIZE, train.CO2EMISSIONS,  color='blue')\n",
    "XX = np.arange(0.0, 10.0, 0.1)\n",
    "yy = clf3.intercept_[0]+ clf3.coef_[0][1]*XX + clf3.coef_[0][2]*np.power(XX, 2) + clf3.coef_[0][3]*np.power(XX, 3)\n",
    "plt.plot(XX, yy, '-r' )\n",
    "plt.xlabel(\"Engine size\")\n",
    "plt.ylabel(\"Emission\")\n",
    "test_x_poly3 = poly3.fit_transform(test_x)\n",
    "test_y3_ = clf3.predict(test_x_poly3)\n",
    "print(\"Mean absolute error: %.2f\" % np.mean(np.absolute(test_y3_ - test_y)))\n",
    "print(\"Residual sum of squares (MSE): %.2f\" % np.mean((test_y3_ - test_y) ** 2))\n",
    "print(\"R2-score: %.2f\" % r2_score(test_y3_ , test_y) )\n",
    "\n",
    "\n",
    "-->"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "button": false,
    "deletable": true,
    "new_sheet": false,
    "run_control": {
     "read_only": false
    }
   },
   "source": [
    "<h2>Want to learn more?</h2>\n",
    "\n",
    "IBM SPSS Modeler is a comprehensive analytics platform that has many machine learning algorithms. It has been designed to bring predictive intelligence to decisions made by individuals, by groups, by systems – by your enterprise as a whole. A free trial is available through this course, available here: <a href=\"http://cocl.us/ML0101EN-SPSSModeler\">SPSS Modeler</a>\n",
    "\n",
    "Also, you can use Watson Studio to run these notebooks faster with bigger datasets. Watson Studio is IBM's leading cloud solution for data scientists, built by data scientists. With Jupyter notebooks, RStudio, Apache Spark and popular libraries pre-packaged in the cloud, Watson Studio enables data scientists to collaborate on their projects without having to install anything. Join the fast-growing community of Watson Studio users today with a free account at <a href=\"https://cocl.us/ML0101EN_DSX\">Watson Studio</a>\n",
    "\n",
    "<h3>Thanks for completing this lesson!</h3>\n",
    "\n",
    "<h4>Author:  <a href=\"https://ca.linkedin.com/in/saeedaghabozorgi\">Saeed Aghabozorgi</a></h4>\n",
    "<p><a href=\"https://ca.linkedin.com/in/saeedaghabozorgi\">Saeed Aghabozorgi</a>, PhD is a Data Scientist in IBM with a track record of developing enterprise level applications that substantially increases clients’ ability to turn data into actionable knowledge. He is a researcher in data mining field and expert in developing advanced analytic methods like machine learning and statistical modelling on large datasets.</p>\n",
    "\n",
    "<hr>\n",
    "\n",
    "<p>Copyright &copy; 2018 <a href=\"https://cocl.us/DX0108EN_CC\">Cognitive Class</a>. This notebook and its source code are released under the terms of the <a href=\"https://bigdatauniversity.com/mit-license/\">MIT License</a>.</p>"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python",
   "language": "python",
   "name": "conda-env-python-py"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.6.7"
  },
  "widgets": {
   "state": {},
   "version": "1.1.2"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 4
}
